package com.dhecp.project.system.service;

import java.util.List;
import java.util.Map;

import com.dhecp.common.core.domain.AjaxResult;
import com.dhecp.core.layui.TreeDataModel;
import com.dhecp.project.system.domain.MailContent;

/**
 * 邮件系统 服务层
 * @author DH-Xxj
 * @version 2020年9月18日
 */
public interface MailContentService {

	/**
	 * 查询当前用户草稿邮件数
	 * @param params 无需参数
	 * @return int - mailCgCount
	 * @author DH-Xxj
	 */
	Integer queryModuleMailCgs(Map<String, Object> params);

	/**
	 * 查询当前用户未读邮件数
	 * @param params 无需参数
	 * @return int - mailWdCount
	 * @author DH-Xxj
	 */
	Integer queryModuleMailWds(Map<String, Object> params);

	/**
	 * 通过邮件Guid查询发件箱信息、邮件发件人、邮件主要内容（不含收件人列表信息）
	 * @param guid 邮件Guid
	 * @return
	 * @author DH-Xxj
	 */
	MailContent selectMainContentByGuid(Map<String, Object> params);

	/**
	 * 通过收件人Guid查询邮件详细内容（含收件人列表信息）
	 * @param guid 收件人Guid
	 * @return
	 * @author DH-Xxj
	 */
	MailContent selectMailContentByGuid(Map<String, Object> params);

    /**
     * 查询发件箱信息、邮件发件人、邮件主要内容（不含收件人列表信息）
     * @param params
     * @return
     * @author DH-Xxj
     * @throws Exception 
     */
	List<MailContent> selectMainContentList(Map<String, Object> params) throws Exception;

    /**
     * 查询收件箱信息
     * @param params
     * @return
     * @throws Exception
     * @author DH-Xxj
     */
	List<MailContent> selectMailContentList(Map<String, Object> params) throws Exception;

    /**
     * 查询已删除邮件
     * @param params
     * @return
     * @throws Exception
     * @author DH-Xxj
     */
	List<MailContent> selectDeletedMailList(Map<String, Object> params) throws Exception;

    /**
     * 查询保留邮件
     * @param params
     * @return
     * @throws Exception
     * @author DH-Xxj
     */
	List<MailContent> selectPerpetualMailList(Map<String, Object> params) throws Exception;

	/**
	 * 获取邮件系统地址簿树
	 * @param params
	 * @return List-TreeDataModel
	 * @author DH-Xxj
	 */
	List<TreeDataModel> queryMailAddressBookTree(Map<String, Object> params);

    /**
     * 保存草稿、发送邮件
     * @param mailType 邮件状态[已发送、草稿、撤销]
     * @param infoItems 必要参数：邮件主表对应实体类的json格式字符串
     * 	guid、pGuid、主题、正文、收件人类型编码、收件人、抄送类型编码、抄送、密送类型编码、密送、附件关联、邮件标签、重要邮件、删除标记、彻底删除标记
     * @return AjaxResult
     * @author DH-Xxj
     */
	AjaxResult insertMainContent(Map<String, Object> params);

    /**
     * 修改邮件状态（已发送、草稿、撤销），只改状态 不改其它内容
     * @param infoItems 必要参数：邮件主表对应实体类的json格式字符串（包含：guid，mailType 邮件状态（已发送、草稿、撤销））
     * @return
     * @author DH-Xxj
     */
	AjaxResult updateMailType(Map<String, Object> params);

    /**
     * 修改收件箱邮件已读标记
     * @param infoItems 必要参数：邮件主表对应实体类的json格式字符串（包含：guid，readed 已读标记）
     * @return
     * @author DH-Xxj
     */
	AjaxResult updateReaded(Map<String, Object> params);

    /**
     * 修改邮件删除标记
     * @param infoItems 必要参数：邮件主表对应实体类的json格式字符串（包含：guid，deleted 删除标记，mailType 邮件状态（已收件、已发送、草稿、撤销））
     * @return
     * @author DH-Xxj
     */
	AjaxResult updateDeleted(Map<String, Object> params);

    /**
     * 修改邮件彻底删除标记
     * @param infoItems 必要参数：邮件主表对应实体类的json格式字符串（包含：guid，deletedSup 彻底删除标记，mailType 邮件状态（已收件、已发送、草稿、撤销））
     * @return
     * @author DH-Xxj
     */
	AjaxResult updateDeletedSup(Map<String, Object> params);

    /**
     * 修改邮件标签
     * @param infoItems 必要参数：邮件主表对应实体类的json格式字符串（包含：guid，mailLabel 邮件标签，mailType 邮件状态（已收件、已发送、草稿、撤销））
     * @return
     * @author DH-Xxj
     */
	AjaxResult updateMailLabel(Map<String, Object> params);

    /**
     * 修改重要邮件标记
     * @param infoItems 必要参数：邮件主表对应实体类的json格式字符串（包含：guid，important 重要邮件，mailType 邮件状态（已收件、已发送、草稿、撤销））
     * @return
     * @author DH-Xxj
     */
	AjaxResult updateImportant(Map<String, Object> params);

    /**
     * 修改保留邮件标记
     * @param infoItems 必要参数：邮件主表对应实体类的json格式字符串（包含：guid，perpetual 保留邮件，mailType 邮件状态（已收件、已发送、草稿、撤销））
     * @return
     * @author DH-Xxj
     */
	AjaxResult updatePerpetual(Map<String, Object> params);

    /**
     * 新增邮件系统地址簿信息
     * @param infoItems 必要参数：邮件系统地址簿对应实体类的json格式字符串（包含：pGuid【上级Guid，顶级分组默认"root"】,title【组名、公司名称、部门名称、用户名称】,vtype【取值：menu,company,dept,user】,orgid【公司编码、部门编码、用户编码】）
     * @return
     * @author DH-Xxj
     */
	AjaxResult insertMailAddressBook(Map<String, Object> params);

    /**
     * 修改邮件系统地址簿分组名称
     * @param guid
     * @param title 名称
     * @return
     * @author DH-Xxj
     */
	AjaxResult updateMailAddressBookForTitle(Map<String, Object> params);

    /**
     * 通过Guid删除邮件系统地址簿信息
     * @param guid
     * @return
     * @author DH-Xxj
     */
	AjaxResult deleteMailAddressBook(Map<String, Object> params);

}
